Oxoscript se transforme en NanoPy - plus d'infos

Quoi de neuf?

24. février 2024

Nouveau firmware de la carte 1.5.2

Correction d’erreurs

améliorations - Science/Science+: amélioration de la détection de fréquence - Science: mise à jour du pilote VOC et eCO2 - Les nombres décimaux sont désormais toujours édités avec deux chiffres (au lieu de 5).

_Nouvelles fonctions

drawRectangleRounded(x,y,w,h,r)

Cette fonction s’appelait drawRoundedRectangle dans la dernière version, mais cela a entraîné quelques conflits avec des scripts existants.

drawSpriteScaled(x,y,w,h,s,data)

Comme drawSprite, mais un facteur d’échelle s peut être spécifié. Si 1 est indiqué, rien n’est mis à l’échelle. 2 signifie le doublement, etc.

textAlignment(alignment).

Cela permet maintenant d’aligner à gauche, à droite ou de centrer les chaînes qui sont éditées avec drawText. (Valeurs: TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER, TEXT_ALIGN_RIGHT)

16. février 2024

Nouveau firmware de la carte 1.5.0

_nouveau dans l’éditeur

Correction d’erreurs

_Nouvelles fonctions

Nouveau design pour le système de menus.

Nouvelle fonction: isEqual(string1, string2)->bool.

Cette fonction compare deux chaînes de caractères et renvoie true ou false.

Nouvelle fonction: strCompare(chaîne1,chaîne2)->int.

Cette fonction compare deux chaînes et renvoie une valeur numérique, en fonction de l’ordre lexicographique. Si la valeur est “0”, les deux chaînes sont identiques. Une valeur négative signifie que la première chaîne doit être classée avant la deuxième chaîne.

Assistance pour l’Oxocard Science+.

La nouvelle Science+ des capteurs supplémentaires. En outre, le capteur de CO2 et de VoC de Renesas a été remplacé par des capteurs plus performants de Sensirion. Les fonctions suivantes sont nouvelles:

getVOC()->float. getVOCIndex()->float. getNOx()->float. getNOxIndex()->float. getTOF8x8()->int[64] getTOF4x4()->int[16]

22 décembre 2023

Nouveau firmware de la carte 1.4.8

_nouveau dans l’éditeur

Les scripts peuvent désormais être chargés et téléchargés.

Correction d’erreurs.

30 novembre 2023

Nouveau firmware de la carte 1.4.6 / 1.4.7

Nouveau

Nouvelles fonctions UART, SPI et Language.

Améliorations

Amélioration du message d’erreur lorsque l’appareil n’est pas connecté au WiFi.

Correction d’erreurs

Les décalages de pixels par défaut pour les écrans rotatifs ont été corrigés (de 240 à 239). La fonction clipRectangle() a également été corrigée. Diverses erreurs NanoPy ont été corrigées: - concaténation d’opérations binaires - Déclaration en place des tableaux statiques. - La déclaration implicite d’une chaîne de caractères est maintenant de 120 caractères, et non plus (120 - 6). - La déclaration d’une variable par le retour d’un tableau depuis une fonction objet fonctionne désormais correctement.

Nouvelles commandes:

Fonctions système

Fonctions IO

3 novembre 2023

Nouveau firmware de la carte 1.4.5

Nouveau

Les en-têtes de requêtes HTTP peuvent désormais être ajoutés avec addRequestHeader(key, value) et supprimés avec clearRequestHeaders().

Les fonctions de fichiers ont été étendues à writeLine(line) et readLine(). Ces fonctions permettent désormais d’écrire/lire beaucoup plus facilement dans/depuis un fichier.

Améliorations

Les réponses du serveur à une requête postRequest() peuvent maintenant aussi être lues avec les fonctions readRequest.

Les certificats serveur HTTPS sont désormais vérifiés en premier lieu avec le CA store interne et ne sont demandés directement au serveur cible qu’en cas d’erreur.

Correction d’erreurs

Les PWM en cours sont désormais correctement stoppés lors de l’initialisation d’un GPIO.

Nouvelles commandes:

Fonctions de fichier

Fonctions réseau

13 octobre 2023

Mises à jour de l’éditeur NanoPy

Il est désormais possible de convertir directement les images dans le format d’octet nécessaire. La fonction se trouve dans l’éditeur de constantes. Elle supporte au maximum les images de 24x24 pixels.

Nouveau firmware de la carte 1.4.4

Nouveau

MQTT/MQTTS - Échange désormais facilement des données via Internet grâce aux nouvelles fonctions MQTT.

Oxocard supporte désormais les requêtes HTTPS. Les certificats de serveur sont automatiquement demandés via notre serveur et déposés dans le dossier “certs” de l’Oxocard. Il est également possible d’ajouter soi-même un certificat dans le système de fichiers et d’y faire référence avec la fonction selectCertificate().

Améliorations

getRequest() peut maintenant retourner des “chunked data” depuis un serveur.

writePWM() a été amélioré pour que les valeurs de dutyCycle modifiées soient affichées de manière plus progressive.

Oxocard Science: les valeurs de décalage min/max réglables des capteurs ont été augmentées.

Correction d’erreurs

Dans la fonction drawEllipse() lors d’une rotation de 90° ou 270°, en plus de x & y, rx & ry sont maintenant aussi échangés.

Nouvelles commandes:

Fonctions de réseau

5 sept 2023 - Désormais utilisable sans cloud/hors ligne

Désormais utilisable sans cloud/hors ligne.

Dès maintenant, le puissant éditeur NanoPy est également disponible hors ligne. Le projet est open source et peut être téléchargé, instructions d’installation comprises, à partir de

Editeur hors ligne

peut être téléchargé. La documentation peut être mise en cache à partir de cette page via le navigateur:

Référence

17 août 2023

Mises à jour de l’éditeur NanoPy

Afin d’améliorer la lisibilité de la documentation, tous les paramètres et valeurs de retour des fonctions ont été retirés des titres. En revanche, chaque fonction a été complétée par une entrée de syntaxe.

Une catégorie de bibliothèque a été ajoutée à la documentation. Celle-ci décrit par exemple les bibliothèques IO internes et les bibliothèques de cartouches.

De nouveaux exemples de scripts ont été ajoutés pour l’Oxocard-Connect et les cartouches. Il convient de mentionner en particulier le cours d’électronique qui peut être réalisé avec le “Oxocard Connect Innovator Kit”.

Nouveau firmware de la carte 1.4.2

Nouveau

Il existe désormais la procédure d’événement onTimer(), qui peut être appelée une fois avec setTimer(ms:long) ou plusieurs fois après un certain temps avec setInterval(ms:long).

La reconnaissance de la cartouche lors de l’Oxocard-Connect a été améliorée. Elle fonctionne désormais même si un script est déjà en cours d’exécution.

La bibliothèque interne “io.npy” a été ajoutée. Elle permet de piloter ou de lire des IO avec seulement deux fonctions.

Améliorations

Lors d’un redémarrage de la carte via l’éditeur NanoPy, il est désormais possible de quitter les scripts avec “while 1:”.

L’avertissement “No WiFi connected” ou “No Editor paird” ne s’affiche désormais plus lorsqu’une cartouche est insérée.

setPrecision(0) est maintenant aussi supporté et se comporte comme si on utilisait round() pour chaque valeur.

Correction d’erreurs

La démo “LED FADE” de l’Oxocard-Connect a été renommée en “LED RUNNING”.

Lors de la connexion sérielle, l’Oxocard-Connect fait désormais automatiquement une réinitialisation et ne doit plus être éteinte et redémarrée manuellement via le menu.

Nouvelles commandes:

Fonctions mathématiques.

Fonctions de temps

Oxocard goes Open Source

Nous tenons notre promesse et allons progressivement rendre publics les designs et le code.

Sur github, vous trouverez désormais les schémas et les designs de toutes les Oxocards et cartouches. Les fichiers BOM (Bill of material) contiennent la liste de tous les composants utilisés. Cela permet aux makers de migrer le matériel Oxocard vers d’autres plates-formes logicielles.

Le firmware des Oxocards n’est actuellement pas encore open source, mais il peut désormais être flashé à tout moment sur les Oxocards. Ceci est nécessaire si les cartes ont été écrasées par exemple avec ESP-IDF ou avec Arduino. Tous les firmwares des cartouches sont open source.

28 juillet 2023

Nouveau firmware de la carte 1.4.1

Nouveau

Les scripts d’utilisateur qui ont été enregistrés sur l’Oxocard peuvent désormais être importés:

# print_hello.npy qui a été chargé sur la carte via "Mes scripts"
def printHelloWorld():
    print "Hello World !"

# main.npy
import print_hello
printHelloWorld() # Sortie: "Hello World !"

Sous Paramètres, il y a désormais l’option Rotation, qui permet de déterminer l’orientation de l’écran.

Tous les textes “Oxoscript” ont été changés en “NanoPy” et toutes les extensions de fichiers “.tc” en “.npy”.

Améliorations

Le champ de saisie de texte de textInput() est désormais quitté lorsqu’un nouveau script a été chargé sur la carte.

Les IO des utilisateurs sont réinitialisés lorsqu’un script est quitté ou lorsqu’un nouveau script est chargé.

Le délai d’attente lors d’un snapshot a été augmenté à 30 secondes.

Il est désormais possible de quitter l’affichage en cas d’erreur de compilation en appuyant sur n’importe quel bouton.

Correction d’erreurs

i2cReadByte() renvoie maintenant 0 si la lecture a échoué.

onClick() n’est maintenant exécuté qu’une fois par clic, comme prévu à l’origine, et non plus plusieurs fois.
Les exemples NanoPy qui utilisaient onClick() de manière incorrecte ont été corrigés.

Nouvelles commandes:

Fonctions IO

Fonctions système

Mai 2023: Oxoscript se transforme en NanoPy

Il existe plusieurs variantes du célèbre langage de programmation Python, auxquelles s’ajoute désormais le langage NanoPy. NanoPy est une version simplifiée de Python. Contrairement à l’original, il est typé de manière statique et peut donc être utilisé avec des exigences matérielles nettement moindres. Il est spécialement optimisé pour les petits ordinateurs. Le langage est basé sur le dialecte de Python, mais contient différentes simplifications qui facilitent l’initiation et la programmation. Jusqu’à présent, le langage était appelé Oxoscript. En raison de la parenté très étroite avec Python, nous avons décidé de changer ce nom.

30 mars 2023

Modifications apportées à l’éditeur:

Nouveau firmware de la carte 1.3.1

Améliorations

AP_SSID et AP_PASSWORD ont été modifiés afin d’éviter les conflits lorsque plusieurs cartes sont en mode point d’accès en même temps.

Si setAutostart(true) a été appelé, une fenêtre s’affiche désormais pendant 3 secondes lors du redémarrage de l’Oxocard, permettant de désactiver la fonction d’autostart.

L’Oxocard-Science a reçu le jeu “Flying Cow” et deux nouvelles démos. La démo “SENSING RADAR” permet de faire de superbes expériences sur les capteurs, car on peut voir comment les valeurs ont évolué dans le temps.

La fenêtre de sélection WiFi a été embellie et une fonction “renumériser” a été ajoutée.

Nouvelles commandes:

Fonctions système

3 février 2023

Nouveau firmware 1.2.9

Correction d’erreurs

strFind() et strSubstring() fonctionnent maintenant aussi avec des variables (avant seulement avec des constantes).

Nouvelles commandes:

Fonctions système

Fonctions du capteur

22 décembre 2022

Nouveau firmware 1.2.7

Python ou pas: c’est vous qui décidez

Les deux points après if/else/for/while/def et class t’énervent ? Nous les avons empruntés au langage Python. Si tu les aimes, tu peux continuer à les écrire. Si ce n’est pas le cas, tu peux désormais les laisser de côté:-).

for i in 10:
    if i < 5:
        print("nombre profond")
    else:
        print("grand nombre")


ou

for i in 10
    if i < 5
        print("nombre profond")
    else
        print("grand nombre")


Beaucoup de débutants ont des difficultés avec les nombreux caractères spéciaux que nous avons repris de Python. Tu peux maintenant l’écrire comme en Python, ou simplement laisser tomber les parenthèses lors des appels de fonction dans les cas suivants:

Compatible avec Python:

clear()
drawText(10,10, "Hello World")
update()


Alternative avec moins de parenthèses:

clear
drawText 10,10, "Hello World"
update


Parce que c’est si beau, voici encore un exemple (pas de deux points, pas de parenthèses pour les appels de fonction sans valeur de retour)

turnOn = false

def onDraw
    if turnOn
        background 255,255,255
    else:
        background 0,0,0
    update

def onClick
    b = getButtons()
    if b.left
        turnOn = false
    elif b.right
        turnOn = true


Les valeurs de retour peuvent maintenant renvoyer des tableaux ouverts

Jusqu’à présent, il n’était possible de renvoyer que des tableaux de taille fixe:

def test()->byte[20]:
    return "Hello"

Désormais, la taille peut être ouverte:

def test(t)->byte[]
    a:byte[20]
    a="byte[20]"

    b:byte[10]
    b="byte[10]"

    if t%2 == 0
        return a
    else
        return b

for i in 10
    print test(i)


sizeof

La fonction sizeof peut maintenant être appliquée aux listes imbriquées.

Expérimental: nouvelle fonction de sérialisation pour les objets

Avec «, il est désormais possible de convertir des objets en tableaux d’octets et inversement. On peut ainsi enregistrer directement des objets dans des fichiers, par exemple. Nous utiliserons bientôt cette commande surtout pour des exemples de communication avancés, par exemple pour la communication entre coprocesseurs, capteurs (I2C), mais aussi pour des protocoles radio.

L’exemple stocke le contenu de l’objet v dans un tableau d’octets buf:

v = vector(x=10,y=20)
buf << v

Cela permet de réécrire les données:

buf = [0,0,32,65,0,0,160,65]
v:vecteur
v << buf
imprimer v.toString()

Introduction à NanoPy

Télécharge ici la documentation gratuite d’introduction à NanoPy:

Guide rapide d’NanoPy.

Maintenant sur Youtube

Nous avons maintenant un canal Youtube où nous mettons régulièrement en ligne de nouvelles vidéos. Une visite vaut la peine:

Oxocard Mini sur Youtube.

16 janvier 2023

Nouveau firmware 1.2.8

Correction d’erreurs

“print (1+2)+3” provoque maintenant une erreur. Pour les exemples avec expressions entre parenthèses, print ne doit pas être utilisé sans parenthèses. Correct: print ((1+2)+3)

“print 10.0%4” entraînait auparavant un message d’erreur.

“print 1+1” renvoie maintenant 2 et non 11.

Les fonctions stringToInt et stringToFloat peuvent désormais gérer les nombres négatifs.

10 décembre 2022

Nouvelles de décembre

Nous avons développé un nouveau jeu. Celui-ci se trouve sous Exemples > Jeux > Flying Cow :-)

Correction de bugs

Optimisation de la sortie des sprites.

Nouvelles commandes:

Fonctions de chaînes

4 novembre 2022

Modifications apportées à l’éditeur:

Changements dans le firmware de la carte:

Corrections de bugs

Le passage correct d’un tableau en paramètre d’une fonction n’affiche désormais plus de message d’erreur.

Nouvelles commandes:

Fonctions graphiques 2D

Fonctions de réseau

Fonctions de chaîne

5 octobre 2022

Nouveau firmware 1.2.4

Expressions constantes

Les calculs simples peuvent désormais être effectués dans des constantes, pour autant qu’elles ne contiennent que des nombres ou d’autres constantes.

const ANGLE_30 = PI / 6
const SIZE = 100


Ces calculs peuvent désormais également être utilisés lors de la déclaration de tableaux. Auparavant, il était uniquement possible de spécifier une valeur fixe ou une constante.


const SIZE = 100

data:byte[SIZE * SIZE]
data2:byte[SIZE / 2]



Corrections de bugs

Pour les classes imbriquées avec des types de données tableaux intégrés, les tableaux n’étaient pas initialisés correctement dans tous les cas, ce qui signifiait que les tableaux avaient toujours la longueur 0. Ceci est maintenant corrigé.

Voici un exemple d’une classe SelectionList, qui contient une liste d’objets label, dont chacun contient une variable texte d’une longueur de 40 bytes :

class Label:
    i:float
    x:byte
    text:byte[40]

class SelectionList:
    labels:Label[5]
    def addText(text:byte[]):
        labels[0].text = text

sl:SelectionList
sl.labels[0].x=1
sl.labels[0].i=1.5
sl.addText("ABC")

print(sl.labels[0].text)
print(sl.labels[0].i)
print(sl.labels[0].x)

22 septembre 2022

Oxocard-Discord:

https://discord.gg/7zMew7KgaZ

Rejoins notre nouveau serveur Discord pour discuter directement avec les développeurs et faire partie de la communauté Oxocard.

Changements dans le firmware de la carte:

Nouvelles commandes:

Fonctions_2D

Fonctions de fichier

Fonctions_du_système

Fonctions_IO

26 août 2022

Nouvelles fonctions:

Programmation via le câble USB

Il est désormais possible de programmer les cartes via un câble USB. Pour cela, l’Oxocard doit disposer au minimum du firmware 1.2.2. Cela ne fonctionne qu’avec le navigateur Chrome et, selon le système d’exploitation, il faut encore installer des pilotes USB. Lorsque l’on se déconnecte, la nouvelle page d’inscription s’affiche et contient de plus amples informations.

Fonction snapshot

Il est désormais possible de prendre des photos de l’écran et de les afficher dans le navigateur. Pour cela, il y a un nouveau symbole d’appareil photo dans la barre d’outils à côté des outils de débogage. Celui-ci est actif lorsque le programme est en cours de débogage.

Exportation de fichiers

Si l’on souhaite transférer des données de capteurs vers le PC/Mac, on peut désormais le faire via la fenêtre du terminal. Pour cela, il suffit d’envoyer les données dans la fenêtre du terminal avec la commande print (attention: la fenêtre du terminal doit être ouverte, sinon rien ne sera transféré). Dans la fenêtre, il y a désormais un bouton de téléchargement en bas, qui exporte les données dans un fichier TXT.

Pour poursuivre le traitement avec Excel, il est recommandé de supprimer d’abord le terminal. Si plusieurs données doivent être envoyées, il suffit de les séparer par des “;”. p.ex. print(valeur1 + “;” + valeur2 + “;” … )

Exemple en ligne

Il y a encore beaucoup de nouveaux exemples à découvrir. Ils se trouvent sous “Exemples”: - 2D: de nombreuses petites apps te montrent comment construire des animations en deux dimensions. - 3D: grâce au moteur 3D intégré, tu peux aussi représenter des objets géométriques simples dans un espace tridimensionnel. - Jeux: tu trouveras ici d’autres petits jeux qui peuvent servir de base à tes propres expériences. - Parcours scientifique: ces exemples sont nécessaires dans le parcours scientifique disponible séparément. Plus d’informations sur info@oxocard.ch

Oxocard Science

Les démos ont été complétées par une application multimètre très performante. Elle permet d’observer toutes les valeurs des capteurs intégrés sur une échelle claire.

Modifications apportées au firmware de la carte:

7 juillet 2022

Modifications du firmware de la carte:

21 juin 2022

Modifications du firmware de la carte:

3 juin 2022

Erreurs corrigées dans NanoPy:

Nouveaux exemples

Sous le dossier “Exemples/3D” se trouve désormais un premier ensemble d’animations 3D. Les fonctions correspondantes seront documentées dans les prochains jours.

Nouvelle fonctionnalité

_Nouvelles classes

vector3D

Cette classe met à disposition les fonctions suivantes:

_Nouvelles fonctions

_Classes renommées

logValues a été renommé en logValue

6 mai 2022

Erreurs corrigées dans NanoPy:

Nouvelle fonctionnalité

Nouvelles classes

Nouvelles fonctions

Classe vector:

Classe dateTime:

Nouvelles constantes

7 avril 2022

Modifications apportées à l’éditeur:

Changements dans le firmware de la carte:

Nouvelles commandes:

Fichier_fonctions

Le système de fichiers de l’Oxocard peut désormais être manipulé avec des fonctions simples. Cela permet par exemple de collecter et de persister des textes ou des données de capteurs. Il est également possible de lire et de traiter les données après une coupure de courant.

open(C_WRITE, "mon_fichier.txt")
text = "Hello World!"
for c in text:
  write(c)
close()

...

open(C_READ, "mon_fichier.txt")
text:byte[13] # to hold "Hello World!"
for i in 13:
  text[i] = read()
close()

setAutostart(enable)

Si la fonction Autostart a été activée, on passe directement au programme de démarrage lors du redémarrage de l’Oxocard (après la connexion à Internet).

setAutostart(true)

turnOff()

Éteint l’oxocard.

sleep(sec)

Eteint l’Oxocard et le fait redémarrer après x secondes.

Fonctions sonores

De nombreuses nouvelles fonctions audio ont été ajoutées, permettant désormais de composer et de jouer des chansons entières avec du code.

setBPM(180)
beginSong()
noteAdvanced(C_NOTE_G, C_DURATION_1_8, C_OCTAVE_C4, C_ARTICULATION_STANDARD);
noteAdvanced(C_NOTE_A, C_DURATION_1_4, C_OCTAVE_C4, C_ARTICULATION_STANDARD);
noteAdvanced(C_NOTE_A, C_DURATION_1_8, C_OCTAVE_C4, C_ARTICULATION_STANDARD);
noteAdvanced(C_NOTE_REST, C_DURATION_1_8, C_OCTAVE_C5, C_ARTICULATION_STANDARD);
noteAdvanced(C_NOTE_A, C_DURATION_1_8, C_OCTAVE_C4, C_ARTICULATION_STANDARD);
noteAdvanced(C_NOTE_B, C_DURATION_1_8, C_OCTAVE_C4, C_ARTICULATION_STANDARD);
noteAdvanced(C_NOTE_C, C_DURATION_1_4, C_OCTAVE_C5, C_ARTICULATION_STANDARD);
noteAdvanced(C_NOTE_C, C_DURATION_1_8, C_OCTAVE_C5, C_ARTICULATION_STANDARD);
noteAdvanced(C_NOTE_REST, C_DURATION_1_8, C_OCTAVE_C5, C_ARTICULATION_STANDARD);
noteAdvanced(C_NOTE_C, C_DURATION_1_8, C_OCTAVE_C5, C_ARTICULATION_STANDARD);
noteAdvanced(C_NOTE_D, C_DURATION_1_8, C_OCTAVE_C5, C_ARTICULATION_STANDARD);
noteAdvanced(C_NOTE_B, C_DURATION_1_4, C_OCTAVE_C4, C_ARTICULATION_STANDARD);
noteAdvanced(C_NOTE_B, C_DURATION_1_8, C_OCTAVE_C4, C_ARTICULATION_STANDARD);
noteAdvanced(C_NOTE_REST, C_DURATION_1_8, C_OCTAVE_C5, C_ARTICULATION_STANDARD);
noteAdvanced(C_NOTE_A, C_DURATION_1_8, C_OCTAVE_C4, C_ARTICULATION_STANDARD);
noteAdvanced(C_NOTE_G, C_DURATION_1_8, C_OCTAVE_C4, C_ARTICULATION_STANDARD);
noteAdvanced(C_NOTE_A, C_OCTAVE_C4, 1.5, C_ARTICULATION_STANDARD);
noteAdvanced(C_NOTE_REST, C_DURATION_1_8, C_OCTAVE_C5, C_ARTICULATION_STANDARD);
#...
endSong()
playSong(true)

3 mars 2022

Modifications de l’éditeur:

Modifications du firmware de la carte:

x=5
y=10
for i in [x..y]:
  print(i)

Des séries décroissantes sont également possibles:

for i in [-10..-20]:
  print(i)

Nouvelles commandes:

setPrecision(precision)

Formate les décimales lors de l’affichage de valeurs flottantes:

f = 1.23931
setPrecision(2)
print(f) # "1.24"

clipRectangle(x,y,w,h)

Limite la sortie pour les commandes de dessin. Le dessin n’est effectué que dans le rectangle défini.

clipRectangle(0,0,240,120)
clear()
drawCircle(120,120,80)
mettre à jour()

noClipping()

Réinitialise le réglage du clipping sur tout l’écran.

drawImageMonoCentered(x,y,w,h,img)

Cette commande est identique à drawImageMono(..), mais l’image est dessinée au centre de la coordonnée x/y (au lieu d’être en haut à gauche). Ainsi, en combinaison avec les commandes rotate() et scale(), il est maintenant possible de faire pivoter ou d’agrandir/réduire une image en la centrant.